from mongoengine import (
    Document, EmbeddedDocument, DynamicDocument,
    StringField, IntField, BooleanField,
    ListField, EmbeddedDocumentField
)

class CiTypeField(EmbeddedDocument):
    name = StringField(max_length=24)
    label = StringField(max_length=32)
    type = StringField(max_length=24)
    required = BooleanField(default=False)

    def __repr__(self):
        return "<F {},{}>".format(self.name, self.type)


class CiType(Document):
    """存储类型定义元数据，一个文档表示一个类别的某个版本"""
    # meta指定存在哪个集合中
    meta = {
        'collection': 'citypes'
        }
    # id 如果没指定自动加入
    name = StringField(required=True, unique_with='version', max_length=32)
    version = IntField(required=True, default=1)
    label = StringField(max_length=32)
    # 这里的字段来源于CiTypeField，通过EmbeddedDocumentField实现。
    fields = ListField(EmbeddedDocumentField(CiTypeField))

    def __repr__(self):
        return "<CT {},{}:{},{}>".format(self.pk, self.name, self.version, self.fields)
    __str__ = __repr__
# 这些文档类对应的视图也要提供界面操作，不提供了

# DynamicDocument表示里面的字段是动态的，不固定
class Ci(DynamicDocument):
    # 文档的字段有哪些
    meta = {'collection': 'cis',
            'app_label':'cmdb',
            'model_name': 'ci'
            }
    # name = StringField()
